package com.yztctech.a25_01_startservice;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

/**
 * startService:显示启动和隐式启动;MainActivity和MyService没有持有关系,相互独立
 *
 * 1、Service是什么？
 *    服务，运行在后台。------------>不需要视图,音乐播放器,推送等
 * 2、分类
 *    运行地点：本地服务和远程服务
 *    启动方式分：startService和bindService
 * 3、startService的使用过程
 *   1）自定义Service
 *   2) 在清单文件中注册
 *   3) 启动Service：startService（Intent intent）
 *
 * 4、startService的生命周期
 *   1）onCreate 只会调用1次
 *   2）onStartCommant 会被调用多次 - 每次startService都会触发--------->里边的参数很重要,也很多,
 *   3）onDestroy 只会调用1次
 *   使用startService启动的Service，当Service启动后就和调用者无关了，即便调用者销毁(退出程序)，Service依旧存在
 * 5、service实战一般用在socket连接使用，mediaplayer，下载文件（apk，视频，图片）
 * 6. @reference https://blog.csdn.net/zjws23786/article/details/51800929
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();//初始化控件 设置监听
    }

    private void initView() {
        findViewById(R.id.btn_startService1).setOnClickListener(this);
        findViewById(R.id.btn_startService2).setOnClickListener(this);
        findViewById(R.id.btn_stopService).setOnClickListener(this);
    }

    /**
     * 1. 显式启动和隐式启动的区别？如果跨进程的话,是没有办法隐式开启的,不在同一个包名下;如果在同一个包中。两者都可以用。在不同包时。只能用隐式启动
     * 2. 停止service(包含显式和隐式)
     * */
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_startService1:
                //创建目的,--->通过类名显示创建
                Intent xsIntent = new Intent(MainActivity.this, MyService1.class);
                xsIntent.putExtra("key_data","大连育知同创");
                //显式启动
                startService(xsIntent);//注意startService并没有获得service的对象,这意味着mainActivity和service没有关系,互相独立,俨然如两个activity
                break;
            case R.id.btn_startService2:
                //创建目的,--->通过action隐式创建service
                Intent intent = new Intent("com.yztctech.a25_01_startservice.myservice2");
                //隐式启动------------------->区别在于intent是怎么创建的
                startService(intent);
                break;
            case R.id.btn_stopService:
                //手动停止Service--------------->如果intent设置成全局,就直接stop,这里没有设置全局,new一个,只要参数一样,还是同一个service,无所谓的
                Intent stopIntent = new Intent(MainActivity.this, MyService1.class);//显式
                Intent stopIntent2 = new Intent("com.yztctech.a25_01_startservice.myservice2");//隐式
                //停止Service
                stopService(stopIntent);
                break;
        }
    }

}
